package com.volunteer.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.volunteer.entity.Activity;
import com.volunteer.entity.Registration;

import java.util.List;

/**
 * 活动报名服务接口
 */
public interface RegistrationService extends IService<Registration> {

    /**
     * 用户报名活动
     *
     * @param activityId 活动ID
     * @param userId     用户ID
     * @return 是否成功
     */
    boolean register(Long activityId, Long userId);

    /**
     * 取消报名
     *
     * @param registrationId 报名ID
     * @param userId         用户ID
     * @return 是否成功
     */
    boolean cancelRegistration(Long registrationId, Long userId);

    /**
     * 审核报名
     *
     * @param registrationId 报名ID
     * @param status         状态：1-通过，2-拒绝
     * @param remark         备注
     * @param operatorId     操作人ID
     * @return 是否成功
     */
    boolean auditRegistration(Long registrationId, Integer status, String remark, Long operatorId);

    /**
     * 管理员签到
     *
     * @param registrationId 报名ID
     * @param operatorId     操作人ID
     * @return 是否成功
     */
    boolean checkIn(Long registrationId, Long operatorId);
    
    /**
     * 用户自助签到
     *
     * @param registrationId 报名ID
     * @param userId         用户ID
     * @return 是否成功
     */
    boolean userCheckIn(Long registrationId, Long userId);

    /**
     * 查询活动报名列表
     *
     * @param page       分页参数
     * @param activityId 活动ID
     * @param status     状态：0-待审核，1-已通过，2-已拒绝，3-已取消
     * @return 报名列表
     */
    Page<Registration> pageActivityRegistrations(Page<Registration> page, Long activityId, Integer status);

    /**
     * 查询用户报名列表
     *
     * @param page   分页参数
     * @param userId 用户ID
     * @param status 状态：0-待审核，1-已通过，2-已拒绝，3-已取消
     * @return 报名列表
     */
    Page<Registration> pageUserRegistrations(Page<Registration> page, Long userId, Integer status);
    
    /**
     * 获取用户报名记录列表(带详情)
     *
     * @param page   分页参数
     * @param userId 用户ID
     * @param status 状态：0-待审核，1-已通过，2-已拒绝，3-已取消
     * @param title  活动标题
     * @return 报名列表
     */
    Page<Registration> getUserRegistrationListWithDetail(Page<Registration> page, Long userId, Integer status, String title);

    /**
     * 检查用户是否报名活动
     *
     * @param activityId 活动ID
     * @param userId     用户ID
     * @return 是否报名
     */
    boolean isUserRegistered(Long activityId, Long userId);

    /**
     * 获取用户报名信息
     *
     * @param activityId 活动ID
     * @param userId     用户ID
     * @return 报名信息
     */
    Registration getUserRegistration(Long activityId, Long userId);

    /**
     * 获取用户已报名的活动列表
     *
     * @param userId 用户ID
     * @return 活动列表
     */
    List<Activity> getRegisteredActivitiesByUserId(Long userId);
}
